#include <iostream>
#include "Sock.hpp"
#include <sys/select.h>
#include "Select.hpp"

static void Usage(std::string str)
{
    std::cout<<str<<" "<<"port"<<std::endl;
}

int main(int argc,char*argv[])
{
    if(argc!=2)
    {
        Usage(argv[0]);
        exit(1);
    }

    uint16_t port=(uint16_t)atoi(argv[1]);

    int listen_sock=Sock::Socket();
    Sock::Bind(listen_sock,port);
    Sock::Listen(listen_sock);
    Select s;
    s.Add(listen_sock);
    while(1)
    {
        vector<int> ready;
        bool res=s.Wait(ready);
        if(res==false)
        {
            return -1;
        }
        for(auto sock:ready)
        {
            if(sock==listen_sock)
            {
                int newsock=Sock::Accept(listen_sock);
                if(newsock==-1) continue;
                s.Add(newsock);
            }
            else
            {
                char buf[1024];
                memset(buf,0,1024);
                int ret=recv(sock,buf,1023,0);
                if(ret<=0)
                {
                    perror("recv error");
                    s.Del(sock);
                    close(sock);
                }
                buf[ret]=0;
                cout<<"client say: "<<"buf"<<endl;

                string rbuf;
                cin>>rbuf;
                ret=send(sock,rbuf.c_str(),rbuf.size(),0);
                if(ret<=0)
                {
                    perror("send error");
                    s.Del(sock);
                    close(sock);
                }
            }
        }
    }
    return 0;
}